//
// Created by hsj on 2022/1/13.
//

#ifndef CLION_CPP_T_CLASS_USE_H
#define CLION_CPP_T_CLASS_USE_H
#include <iostream>
namespace my_class_use_hsj{

//测试类的使用
void test_class_use();

class Time{
    private:
        int hours;
        int minutes;
    public:
        Time();
        Time(int h,int m = 0);
        void addMin(int m);
        void addHr(int h);
        void reset(int h = 0,int m = 0);
        Time sum(const Time &) const;
        void show() const;
        //**************************************************
        //操作符重载
        //**************************************************
        Time operator+(const Time &) const;//操作符重载
        Time operator+(const int &i) const{//操作符重载
            Time result;
            int total_minutes= this->hours * i * 60 + this->minutes * i;
            result.hours = total_minutes / 60;
            result.minutes = total_minutes % 60;
            return result;
        };
        //**************************************************
        //友元函数
        //原型虽然在类里面，但是不是成员函数（访问权限和成员函数一样）
        //非inline函数定义不可以使用：friend 关键字
        //默认就是：inline 函数
        //**************************************************
        friend Time operator+(double m,const Time &t){
            Time result;
            int total_minutes= t.hours * m * 60 + t.minutes * m;
            result.hours = total_minutes / 60;
            result.minutes = total_minutes % 60;
            return result;
        };
        friend std::ostream & operator<<(std::ostream &os,const Time &t){
             os<<"[operator<<]hours: "<<t.hours<<" [operator<<]minutes: "<<t.minutes<<std::endl;
             return os;
        };
};

}
#endif //CLION_CPP_T_CLASS_USE_H
